In the digital media landscape, a change is occurring from traditional downloading to streaming. Streaming allows for quicker listening to or viewing content, although files are (usually) not retained as a whole on the receiving computer. This saves storage on the receiving computer, and also allows for business models where one pays for each time the content is streamed.
For linear content such as movies, music or television shows implementing streaming is conceptually trivial. But transferring this idea to non-linear content, in particular software applications such as games, is hard because it is unknown in advance how the content is going to be used. Current state of the art systems try to overcome this difficulty by buffering a large part of the content that is expected to be used first and long enough so that the rest of the content can be downloaded before the user reaches the unbuffered part. For example, in the context of a level-based game, such systems might buffer level 1 up to 4, so that level 5 and further can be downloaded before the player reaches level 5.
While this approach is similar to the concept of buffering linear content, the size of the required buffer is much larger, leading to unacceptably long waiting times before the content can be used as well as large storage requirements for storing the buffered data. In addition, because of the many different ways in which the content can be used, often some part of the content is not contained in the buffer, which may lead to performance drops during application usage or even to a crash if the part is essential to continued operation of the application. Further, existing systems only work successfully on a limited set of applications, since determining what the initial content will be is often difficult and highly dependent on the type of application.
Many prior art approaches exist that seek to improve on this situation. Some examples are U.S. Pat. No. 7,240,162, U.S. Pat. No. 8,095,679, U.S. Pat. No. 8,613,673, U.S. Pat. No. 8,468,175, U.S. Pat. No. 8,539,038 and US 2012/0167075. The general approach is to predict in some manner which content will be accessed by the user next, so this content can be streamed to the receiving computer just when it is necessary. However, most of these approaches focus on content contiguity. That is, a prediction is made based on paths through the software, e.g. when level 1 is completed one will go to level 2 or perhaps to bonus level A. Or, when file A has been read then the content of file B is likely next, as B contains icons needed by software routines in A. In the context of games, predicting such paths is highly complex as a large and complex game may have a very extensive branch structure. This may make it very time-consuming to make a decision, or even render it technically impossible.